home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Special 25 / AMIGAplus Sonderheft 25 (2000)(Falke)(DE)(Track 1 of 4)[!].iso / PublicDomain / Spiele / FatalMission / FatalMission.slave.asm < prev    next >
Assembly Source File  |  2000-05-14  |  2KB  |  95 lines

  1. ; Fatal Mission loader
  2.  
  3.     include    whdload.i
  4.     include    whdmacros.i
  5.     include    lvo/exec_lib.i
  6.  
  7. base    SLAVE_HEADER
  8.     dc.w    10,0            ; whdload version required, flags
  9.     dc.l    $80000,0        ; basemem, 0
  10.     dc.w    start-base,0,0        ; slave code, dir, dontcache
  11.     dc.b    0,$59            ; debugkey, quitkey
  12. expmem    dc.l    $4b000            ; 4A014 needed :(
  13.     dc.w    name-base,copy-base,info-base
  14. name    dc.b    'Fatal Mission',0
  15. copy    dc.b    '1991 Robin Burrows <rburrows@bigfoot.com>',0
  16. info    dc.b    'HD-installed by Kyzer <kyzer@4u.net>',0
  17.     cnop    0,4
  18. resload    dc.l    0
  19. tags    dc.l    WHDLTAG_CUSTOM1_GET
  20. trainer    dc.l    0,TAG_DONE
  21.  
  22. start    move.l    a0,a6
  23.     lea    resload(pc),a0
  24.     move.l    a6,(a0)
  25.  
  26.     lea    tags(pc),a0
  27.     jsr    resload_Control(a6)
  28.  
  29.     ; install fake exec
  30.     lea    $400.w,a1
  31.     move.l    a1,4.w
  32.     patch    _LVOAllocMem(a1),.alloc   ; only called twice, chip and fast
  33.     patch    _LVOOpenLibrary(a1),.open ; only to get gfxbase for shutdown
  34.     ret    _LVOFreeMem(a1)
  35.     ret    _LVOCloseLibrary(a1)
  36.  
  37.     ; load and relocate FM1 into fastmem
  38.     lea    fm(pc),a0
  39.     move.l    expmem(pc),a1
  40.     jsr    resload_LoadFile(a6)
  41.     tst.l    d0
  42.     beq.s    .fail
  43.     move.l    expmem(pc),a0
  44.     suba.l    a1,a1
  45.     jsr    resload_Relocate(a6)
  46.     tst.l    d0
  47.     beq.s    .fail
  48.  
  49.     ; load hiscores
  50.     lea    hisc(pc),a0
  51.     move.l    expmem(pc),a1
  52.     patchs    $aca(a1),.hisc    ; add hiscore save patch
  53.     add.l    #$44f6c,a1
  54.     jsr    resload_LoadFile(a6)
  55.  
  56.     ; cheats / run game
  57.     move.l    expmem(pc),a0
  58.     move.l    trainer(pc),d0
  59.     beq.s    .nocht
  60.     move.w    #$4e71,d0
  61.     move.w    d0,$1176(a0)    ; end of game DIED test
  62.     move.w    d0,$1aa2(a0)    ; enemy collision player 1
  63.     move.w    d0,$1b90(a0)    ; enemy collision player 2
  64.     move.w    d0,$1d34(a0)    ; scenery collision player 1
  65.     move.w    d0,$1df8(a0)    ; scenery collision player 2
  66. .nocht    jsr    $72(a0)        ; run game
  67.  
  68. .fail    move.w    #$7fff,_custom+intena
  69.     pea    TDREASON_OK.w
  70.     move.l    resload(pc),-(sp)
  71.     addq.l    #resload_Abort,(sp)
  72.     rts
  73.  
  74. .alloc    move.l    expmem(pc),d0
  75.     add.l    #$45000,d0
  76.     btst.b    #1,d1
  77.     beq.s    .fast
  78. .open    move.l    #$400,d0
  79. .fast    rts
  80.  
  81. .hisc    move.w    #$7fff,intena(a6)    ; the instruction we overwrote
  82.     movem.l    d0-d1/a0-a2,-(sp)
  83.     lea    hisc(pc),a0
  84.     move.l    expmem(pc),a1
  85.     add.l    #$44f6c,a1
  86.     move.l    resload(pc),a2
  87.     moveq    #112,d0
  88.     jsr    resload_SaveFile(a2)
  89.     movem.l    (sp)+,d0-d1/a0-a2
  90.     rts
  91.  
  92. fm    dc.b    "FM1",0
  93. hisc    dc.b    "FM1.hisc",0
  94.  
  95.